﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace CRM.Database.Model
{
    public class profineRegionsCollection : AbstractCollection
    {
        /// <summary>
        /// Список регионов профайн
        /// </summary>
        public List<profineRegions> profineRegionsList
        {
            get { return Entities.profineRegions.AsNoTracking().ToList(); }
        }

        #region Implementation of IGetItem

        /// <summary>
        /// Получение списка элементов
        /// </summary>
        /// <returns>Список элементов</returns>
        public override List<object> GetList()
        {
            return new List<object>(profineRegionsList);
        }

        /// <summary>
        /// Получение типа текущего элемента
        /// </summary>
        /// <returns></returns>
        protected override Type GetItemType()
        {
            return typeof (profineRegions);
        }

        /// <summary>
        /// Получение статического списка для хранения объектов
        /// </summary>
        /// <returns></returns>
        public override object GetStaticCollection()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Получение элемента из коллекции по идентификатору
        /// </summary>
        /// <param name="itemId">Идентификатор</param>
        /// <returns>Элемент</returns>
        public override object GetItemById(int itemId)
        {
            return Entities.profineRegions.Find(itemId);
        }

        #endregion

        #region Implementation of IAddDeleteUpdate

        ///// <summary>
        ///// Добавление элемента в коллекцию
        ///// </summary>
        ///// <param name="item">Элемент</param>
        ///// <param name="userLogin">Логин пользователя, который делает изменения</param>
        //public bool Add(object item, string userLogin)
        //{
        //    if (item.GetType() != typeof (profineRegions))
        //        return false;

        //    return DB.Add(item, userLogin);
        //}

        ///// <summary>
        ///// Удаление элемента из коллекции
        ///// </summary>
        ///// <param name="item">Элемент</param>
        ///// <returns>Результат удаления</returns>
        //public bool Delete(object item)
        //{
        //    if (item.GetType() != typeof (profineRegions))
        //        return false;
        //    return DB.Delete(item);
        //}

        ///// <summary>
        ///// Удаление элемента из коллеции по идентификатору
        ///// </summary>
        ///// <param name="itemId">Идентификатор</param>
        ///// <returns>Результат удаления</returns>
        //public bool DeleteById(int itemId)
        //{
        //    object obj = GetItemById(itemId);
        //    if (obj == null)
        //        return false;
        //    return Delete(obj);
        //}

        /// <summary>
        /// Обновление элемента в коллекции
        /// </summary>
        /// <param name="item">Новый элемент</param>
        /// <param name="userLogin">Логин пользователя, который делает изменения</param>
        /// <returns>Результат операции</returns>
        public new bool Update(object item, string userLogin)
        {
            var newProfineRegion = (profineRegions) item;
            if (newProfineRegion == null)
                return false;


            var ProfineRegion4Update = GetItemByIdFromDatabase(newProfineRegion.IdProfineRegion) as profineRegions;

            if (ProfineRegion4Update == null)
                return true;

            if (!string.IsNullOrEmpty(newProfineRegion.NameEn))
                ProfineRegion4Update.NameEn = newProfineRegion.NameEn;

            if (!string.IsNullOrEmpty(newProfineRegion.NameRu))
                ProfineRegion4Update.NameRu = newProfineRegion.NameRu;

            ProfineRegion4Update.IsActive = newProfineRegion.IsActive;

            if (newProfineRegion.IdCountry > 0)
                ProfineRegion4Update.IdCountry = newProfineRegion.IdCountry;


            return base.Update(ProfineRegion4Update, userLogin);
        }

        /// <summary>
        /// Обнуление статической коллекции
        /// </summary>
        protected override void SetStaticListToNULL()
        {
            throw new NotImplementedException();
        }

        #endregion

        //#region Implementation of IGetIdByName

        ///// <summary>
        ///// Получение идентификатора по имени
        ///// </summary>
        ///// <param name="name">Имя</param>
        ///// <returns>Идентификатор</returns>
        //public int GetIdByName(string name)
        //{
        //    profineRegions profineRegion = profineRegionsList.FirstOrDefault(c => c.NameRu == name || c.NameEn == name);

        //    if (profineRegion == null)
        //        return 0;
        //    return profineRegion.IdProfineRegion;
        //}

        //#endregion
    }
}